#ifndef COMMON_UTILS_H
#define COMMON_UTILS_H

#include <string>
#include <vector>

/**
 * @brief:  通用工具
 */
class CommonUtils
{
public:
    CommonUtils();

    /**
     * @brief:  读取环境变量
     */
    static std::string getEnv(const std::string &key, const std::string &defaultValue);

    /**
     * @brief:  设置环境变量
     */
    static void setEnv(const std::string &key, const std::string &value, bool replace = true);

    /**
     * @brief:  解析uri
     */
    static bool parserHostPort(const std::string &callerApi, std::string &host, int &port);

    /**
     * @brief:  获取当前进程的pid
     */
    static pid_t getCurrentPid();

    /**
     * @brief:  截取第一个命名空间
     *          如：/a/b/c，返回/a；/a/b，返回/a，/a返回/a
     */
    static std::string splitFirstNameSpace(const std::string &key);

    /**
     * @brief:  删除多余的/，保证返回的字符串中没有连续两个//
     */
    static std::string removeBias(const std::string &str);

    /**
     * @brief:  生成命名空间
     *          如： /a，返回/a；
     *              a返回/a；
     *              空字符串返回/
     *              /a/，返回/a
     *              /a//，返回/a
     */
    static std::string generateNameSpace(const std::string &name);

    /**
     * @brief:  获取包的根路径，可能有多个路径
     */
    static std::vector<std::string> getRootPackagePath();

    /**
     * @brief:  获取指定包路径
     */
    static std::vector<std::string> getPackagePath(const std::string &package);

    /**
     * @brief:  获取指定包的指定launch文件路径
     */
    static std::vector<std::string> getLaunchPath(const std::string &package, const std::string &launchName);

    /**
     * @brief:  获取指定包的可执行文件路径
     */
    static std::vector<std::string> getExecPath(const std::string &package, const std::string &name);
};


#endif //COMMON_UTILS_H
